package com.app.mvvmkotlindemo.network

import com.app.mvvmkotlindemo.BuildConfig
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.withContext

/**
 * Created by on 2020/11/23.
 * 天天挂线
 *  746608431@qq.com
 *  描述:TODO
 */

class HttpRequestManger {
    companion object {
        /**
         * 如果是复杂的 需要请求多个接口的，或者多个异步请求等等，可以写在这里，普通简单的接口直接 apiService 调用
         */

        val instance: HttpRequestManger by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { HttpRequestManger() }

        //双重校验锁式-单例 封装NetApiService 方便直接快速调用简单的接口
        val apiService: ApiService by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            RetrofitClient.instance.getApi(ApiService::class.java, BuildConfig.BASE_URL)
        }
    }



//    /**
//     * 获取首页文章数据
//     */
//    suspend fun getHomeData(pageNo: Int): ApiResponse<ApiPagerResponse<ArrayList<AriticleResponse>>> {
//        //同时异步请求2个接口，请求完成后合并数据
//        return withContext(Dispatchers.IO) {
//            val listData = async { apiService.getAritrilList(pageNo) }
//            //如果App配置打开了首页请求置顶文章，且是第一页
//            if (CacheUtil.isNeedTop() && pageNo == 0) {
//                val topData = async { apiService.getTopAritrilList() }
//                listData.await().data.datas.addAll(0, topData.await().data)
//                listData.await()
//            } else {
//                listData.await()
//            }
//        }
//    }
//
//    /**
//     * 注册并登陆
//     */
//    suspend fun register(username: String, password: String): ApiResponse<UserInfo> {
//        val registerData = apiService.register(username, password, password)
//        //判断注册结果 注册成功，调用登录接口
//        if (registerData.isSucces()) {
//            return apiService.login(username, password)
//        } else {
//            //抛出错误异常
//            throw AppException(registerData.errorCode, registerData.errorMsg)
//        }
//    }
}